package com.rxyb.rabbitmq;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.rabbit.core.RabbitMessagingTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * @author lcf
 * @date 2020-05-25-15:25
 */
@Component
public class MessageProducer {
    /**
     * 装配AMQP模板
     */
    @Autowired
    private AmqpTemplate amqpTemplate;

    /**
     * 装配RabbitMessaging模板
     */
    @Autowired
    private RabbitMessagingTemplate rabbitMessagingTemplate;

    /**
     * headers路由策略---WhereAllMap匹配测试
     *
     * @date 2018年7月19日 下午5:15:01
     */
    public void headersExchangeWhereAllMapTest() {
        Map<String, Object> headers = new HashMap<String, Object>();
        headers.put("name", "邓沙利文");
        headers.put("motto", "justry");
        rabbitMessagingTemplate.convertAndSend("My-Headers-Exchange", "", "通过[头交换机]传递数据咯", headers);
    }

    /**
     * topic路由策略(可以通配的路由键)测试
     *
     * @date 2018年7月18日 下午4:42:54
     */
    public void topicExchangeTest1() {
        // 此消息能匹配上 路由键为“routingKey.#”和“#”的队列
        amqpTemplate.convertAndSend("My-Topic-Exchange", "routingKey.myTest", "1");
    }

    /**
     * direct路由策略---测试HttpClient的请求方法
     *
     * @date 2018年7月19日 下午5:15:01
     */
    public void directExchangeRequestTest() {
//        User user = new User();
//        user.setAge(18);
//        user.setGender("女");
//        user.setMotto("不感兴趣！");
//        user.setName("喵喵");
//        String jsonString = JSON.toJSONString(user);
        String str = "";
        amqpTemplate.convertAndSend("My-Direct-Exchange", "requestTest.aa", str);
    }

    /**
     * fanout路由策略(即:广播模式) 测试
     *
     * @date 2018年7月18日 下午4:42:54
     */
    public void fanoutExchangeTest() {
        amqpTemplate.convertAndSend("My-Fanout-Exchange", "", "123");
    }
}
